package com.waves.spring.boot.constructor;

import com.waves.core.utils.StringUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Set;

/**
 * 获取BeanDefinition源
 */
//@Configuration
public class Config1 {

    public static void main(String[] args) {
        // ①如果 Bean 是通过注解（如 @Component、@Service、@Configuration）定义的，通常会返回类的全限定名
        // ②如果 Bean 是从 XML 文件定义的，它会返回 XML 文件的路径
        // ③如果 Bean 是通过 Java 配置类（带有 @Configuration 注解的类）中的 @Bean 方法定义的；它会返回包含 @Bean 方法的类的全限定名
        SpringApplication application = new SpringApplication(Config1.class);
         application.setSources(Set.of("classpath:xml/bean1.xml"));
        ConfigurableApplicationContext context = application.run(args);

        // 获取beanDefinition源的描述信息
        Arrays.stream(context.getBeanDefinitionNames()).forEach(i -> {
            String description = context.getBeanFactory().getBeanDefinition(i).getResourceDescription();
            if (StringUtils.isNotEmpty(description)) {
                System.out.println("name: " + i + "; BeanDefinition来源: " + description);
            }
        });
        context.close();
    }

//    @Bean
    public Bean1 getBean1() {
        return new Bean1();
    }

//    @Bean
    public TomcatServletWebServerFactory servletWebServerFactory() {
        return new TomcatServletWebServerFactory();
    }


}

